<?php
/*
 * uploadOne 单个文件上传函数
 * @param  string $file 上传的文件
 * @param  int $macsize 上传文件的大小限制，最大
 * @param  array $exts 后缀名 数组 array('png,gif,jpg,jepg')
 * @param  string $rootPath 文件上传目录
 * @param  bool $thump 是否生成缩略图 true生成 false不生成 默认false
 * @param  array $thumb_info : array($mode,$w,$h,$suffix)
 *              $mode 缩略图生成方法 1等比例缩放 2缩放后填充 3居中裁剪 4左上角裁剪 5右下角裁剪 6缩略图规定尺寸缩放 默3
                $w 缩略图宽度 默认 100px
                $h 缩略图高度 默认 100px
                $suffix 缩略图名称后缀 默认_thumb
 *  @param  bool $masks 是否给图片添加水印 true 为添加 false为不添加 默认false不添加
 *  @param  string $mask_img 添加的水印图片
 *  @param  int $mask_position 水印位置 1，2，3，4，5，6，7，8，9 分别代表图片从左到右、从上到下9个位置 默认为9右下角
 *  @param  int $transparent 水印透明度 50代表50% 默认50%
 *  @param  array $mask_info:array(string $mask_img,int $mask_position,int $transparent)
 *                   $mask_img 添加的水印图片
 *                   $mask_position 水印位置 1，2，3，4，5，6，7，8，9 分别代表图片从左到右、从上到下9个位置 默认为9右下角
 *                   $transparent 水印透明度 50代表50% 默认50%
 *  @param  bool $replase 是否删除源文件 true删除 false不删除 默认false
 * */

//$mask_img,$mask_position = 9,$transparent = 50,

// 文件引用
// include APP_PATH.'/common/upload.php';

//$tump,$thumb_info,
function  dcb_uploadOne($file,$maxSize,$exts,$rootPath,$thumb,$thumb_info,$masks,$mask_info,$replace=false){
    if(!$file['error']){
        $upload = new \Think\Upload();// 实例化上传类
        if(empty($rootPath)||$rootPath==""){
            $rootPath = './Public/Uploads/';
        }
        if(empty($exts)||$exts==""){
            $exts = array('png','jpg','jpeg','gif');
        }
        $upload->maxSize = $maxSize ;// 设置附件上传大小
        $upload->exts = $exts;// 设置附件上传类型
        $upload->rootPath = $rootPath; // 设置附件上传根目录
//        $upload->savePath = ''; // 设置附件上传（子）目录
        $upload->replace = $replace;
        $upload->subName = array('date', 'Ymd');

        if($mask_info == ''){
            $mask_info = array('./Public/Uploads/logo.png','','');
        }
        $info = $upload->uploadOne($file);// 上传文件
        if(!$info) {// 上传错误提示错误信息
            return  $upload->getError();
        }else{// 上传成功
            $up_img = $rootPath.$info['savepath'].$info['savename'];
            $info['img_url'] = ltrim($up_img,'.');
            if($thumb){
                $tumb_url = dcb_thumb($up_img,$thumb_info);
//                $info['thumb_img_url'] = $tumb_url;
                $info['thumb_img_url'] = ltrim($tumb_url,'.');
            }
            if($masks){
                //添加水印
                dcb_water($up_img,$mask_info);
            }
            return $info;
        }
    }else{
        return '文件损坏！';
    }
}

/*
 * 多个文件批量上传函数
 */
function dcb_uploadMore($file,$maxSize,$exts,$rootPath,$thumb,$thumb_info,$masks,$mask_info,$replace=false){
    $upload = new \Think\Upload();// 实例化上传类
    if(empty($rootPath)||$rootPath==""){
        $rootPath = './Public/Uploads/';
    }
    if(empty($exts)||$exts==""){
        $exts = array('png','jpg','jpeg','gif');
    }
    $upload->maxSize = $maxSize ;// 设置附件上传大小
    $upload->exts = $exts;// 设置附件上传类型
    $upload->rootPath = $rootPath; // 设置附件上传根目录
    $upload->replace = $replace;
    $upload->subName = array('date', 'Ymd');
    $info = $upload->upload($file);// 上传文件
    if(!$info){
        return  $upload->getError();
    }else{
        foreach($info as $k=>$v){
            $up_img = $rootPath.$v['savepath'].$v['savename'];
            $info[$k]['img_url'] = ltrim($up_img,'.');
            if($thumb){
                //生成缩略图
                $tumb_url = dcb_thumb($up_img,$thumb_info);
                $info[$k]['thumb_url'] = ltrim($tumb_url,'.');
            }
            if($masks){
                //添加水印
                dcb_water($up_img,$mask_info);
            }
        }
        return $info;
    }
    return $info;
}

/*
生成缩略图函数
*/
function dcb_thumb($file,$thumb_info){
    $file_ar = explode('.',$file);  //将路径按 . 分割存入数组
    $name="";
    for($i=0;$i<count($file_ar)-1;$i++){
        $name.= ".".$file_ar[$i];   //拼出路径去掉格式的部分 但前面多个点   ../**/**
    }
    $img_ext = $file_ar[count($file_ar)-1];  //得到图片格式
    if($thumb_info[3] == ''){
        $thumb_info[3] = '_thumb';
    }

    $thumb_img = '.'.ltrim($name,'.').$thumb_info[3].'.'.$img_ext;  //频出缩略图路径

    $upload = new \Think\Image();// 实例化图片类

    $upload->open(WORKING_PATH.$file);  //打开图片

    if($thumb_info[0]==''){
        $thumb_info[0] = 3;
    }
    if($thumb_info[1] == ''){
        $thumb_info[1] = 100;
    }
    if($thumb_info[2] == ''){
        $thumb_info[2] = 100;
    }
    $data = $upload->thumb($thumb_info[1],$thumb_info[2],$thumb_info[0]);//生成缩略图
    $data->save(WORKING_PATH.$thumb_img,'jpg',100);//保存缩略图
    return $thumb_img;
}

/*
加水印函数
*/
function dcb_water($file,$mask_info){
    $upload = new \Think\Image();// 实例化上传类
//    $water_img = $mask_info[0];
    if($mask_info[0] == ''){
        $mask_info[0] = './Public/Uploads/logo.png';
    }
    if($mask_info[1] == ''){
        $mask_info[1] = 9;
    }
    if($mask_info[2] == ''){
        $mask_info[2] = 50;
    }

    $upload->open(WORKING_PATH.$file)->water(WORKING_PATH.$mask_info[0],$mask_info[1],$mask_info[2])->save(WORKING_PATH.$file);
//    $image->open('./1.jpg')->water('./logo.png')->save("water_o.gif");
//    water方法的第二个参数表示水印的位置，可以传入下列Think\Image类的常量或者对应的数字：
}